package com.myown.jdk.design.singleton;

import java.util.Calendar;

/**
 * 单例模式 <p>
 *
 * 懒加载，需要时才加载，优化内存 <p>
 *
 * 懒汉式存在安全隐患，当多线程同时访问调用该类是会出现多个对象的可能，
 * 需要加入关键字synchronized(保证同时）,但是加入此关键字会使程序调
 * 用变慢。 <p>
 *
 *
 * @author lincky
 * @version v1.0.0
 * @time 2017.03.24 13:51
 */
public class LazySingleton {

    private static volatile LazySingleton instance = null;

    private LazySingleton(){

    }

    private static synchronized void syncInit() {
        if (instance == null) {
            instance = new LazySingleton();
        }
    }

    public static LazySingleton getInstance() {
        if (instance == null) {
            syncInit();
        }
        return instance;
//        return SingletonFactory.instance;
    }

    /**
     * 使用内部静态类时可避免同步开销
     */
    private static class SingletonFactory {
        private static LazySingleton instance = new LazySingleton();
    }

}
